package com.lechi.web.system.mapper.iot;


import com.lechi.web.system.domain.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 监测数据Mapper接口
 *
 * @author yangguang
 * @date 2024-03-20
 */
public interface IotMonitorDataMapper {

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<IotMonitorDataBo> selectIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);


    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<OutBondMonitorDataBo> selectOutBoundMonitorDataList(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<LocalDateTime> selectLostIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    IotMonitorDataCountBo selectIotMonitorDataCount(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询区间内数据平均值
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    Long selectAvgMonitorData(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    Long selectExistsMonitorData(IotMonitorDataBo iotMonitorDataBo);


    int updateExistsMonitorData(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    IotMonitorDataBo exportIotMonitorHeader(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<IotMonitorDataBo> selectLatestMonitorData(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<OutBondMonitorDataBo> selectOutBoundLatestMonitorData(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合
     */
    List<IotMonitorDataBo> exportIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);


    /**
     * 格式化导出按秒查询明细数据
     *
     * @param params 监测数据
     * @return 监测数据集合
     */
    @MapKey("d")
    Map<String, IotSensorValue> selectSecondDataData(@Param("params") Map<String, Object> params);

    /**
     * 查询导出数据的 平均值，最大值，最小值数据
     *
     * @param params 监测数据
     * @return 监测数据集合
     */
    @MapKey("d")
    Map<String, IotSensorValue> selectRealTimeExportData(@Param("params") Map<String, Object> params);

    /**
     * 查询导出数据的 平均值，最大值，最小值数据
     *
     * @param params 监测数据
     * @return 监测数据集合
     */
    @MapKey("d")
    Map<String, IotSensorValue> selectAvgMinMaxExportMonitorData(@Param("params") Map<String, Object> params);

    /**
     * 数据分析实时查询
     *
     * @param params 监测数据
     * @return 监测数据集合
     */
    List<IotSensorValue> selectRealDataAnalysisData(@Param("params") Map<String, Object> params);

    /**
     * 数据分析查询
     *
     * @param params 监测数据
     * @return 监测数据集合
     */
    List<IotSensorValue> selectDataAnalysisData(@Param("params") Map<String, Object> params);

    /**
     * 新增监测数据
     *
     * @param iotMonitorDataBo 监测数据
     * @return 结果
     */
    int insertIotMonitorData(@Param("tableName") String tableName, @Param("list") IotMonitorDataBo iotMonitorDataBo);


    /**
     * 新增监测数据
     *
     * @param list 监测数据
     */
    void batchInsert(@Param("tableName") String tableName, @Param("list") List<IotMonitorDataBo> list);

    /**
     * 批量删除监测数据
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteIotMonitorDataByIds(@Param("list") Long[] ids);
}
